//
//  HLGiftLiveShowCustomView.h
//  YueYue
//
//  Created by hulu001 on 2024/1/2.
//

#import <UIKit/UIKit.h>
#import "HLGiftLiveShowModel.h"

NS_ASSUME_NONNULL_BEGIN

/**
 弹幕展现模式
 
 - fromTopToBottom: 自上而下
 - fromBottomToTop: 自下而上
 */
typedef NS_ENUM(NSUInteger, HLGiftLiveShowMode) {
    HLGiftLiveShowModeFromTopToBottom = 0,
    HLGiftLiveShowModeFromBottomToTop = 1,
};

/**
 弹幕消失模式
 
 - right: 向右移出
 - left: 向左移出
 */
typedef NS_ENUM(NSUInteger, HLGiftLiveHiddenMode) {
    HLGiftLiveHiddenModeRight = 0,
    HLGiftLiveHiddenModeLeft = 1,
    HLGiftLiveHiddenModeNone = 2,
};

/**
 弹幕出现模式
 
 - none: 无效果
 - left: 从左到右出现（左进）
 */
typedef NS_ENUM(NSUInteger, HLGiftLiveAppearMode) {
    HLGiftLiveAppearModeNone = 0,
    HLGiftLiveAppearModeLeft = 1,
};


/**
 弹幕添加模式（当弹幕达到最大数量后新增弹幕时）,默认替换
 
 - LiveGiftAddModeReplace: 当有新弹幕时会替换
 - LiveGiftAddModeAdd: 当有新弹幕时会进入队列
 */
typedef NS_ENUM(NSUInteger, HLGiftLiveAddMode) {
    HLGiftLiveAddModeReplace = 0,
    HLGiftLiveAddModeAdd     = 1,
};

@protocol HLGiftLiveShowCustomViewDelegate <NSObject>

@optional
- (void)giftDidRemove:(HLGiftLiveShowModel *)showModel;

@end

@interface HLGiftLiveShowCustomView : UIView

+ (instancetype)addToView:(UIView *)superView;
+ (instancetype)addToView:(UIView *)superView y:(CGFloat)y;

@property(nonatomic, assign) CGFloat kExchangeAnimationTime;/**< 交换动画时长 */
@property(nonatomic, assign) CGFloat kAppearAnimationTime;/**< 出现时动画时长 */
@property(nonatomic, assign) HLGiftLiveAddMode addMode;/** 弹幕添加模式,默认替换 */

@property(nonatomic, weak) id<HLGiftLiveShowCustomViewDelegate> delegate;

/**
 *  设置是否打印信息
 *
 *  @param isDebug 开发的时候最好打开，默认是NO
 */
- (void)enableInterfaceDebug:(BOOL)isDebug;

/**
 设置最大礼物数量
 
 @param maxGiftCount 默认为3
 */
- (void)setMaxGiftCount:(NSInteger)maxGiftCount;

/**
 设置弹幕展现模式
 
 @param mode 弹幕展现模式
 */
- (void)setShowMode:(HLGiftLiveShowMode)mode;

/**
 设置弹幕消失模式
 
 @param model 弹幕消失模式
 */
- (void)setHiddenModel:(HLGiftLiveHiddenMode)model;

/**
 设置弹幕出现模式
 
 @param model 弹幕出现模式
 */
- (void)setAppearModel:(HLGiftLiveAppearMode)model;

/**
 增加或者更新一个礼物视图
 
 @param showModel 礼物模型
 */
- (void)addLiveGiftShowModel:(HLGiftLiveShowModel *)showModel;

/**
 增加或者更新一个礼物视图
 
 @param showModel 礼物模型
 @param showNumber 如果传值，则显示改值，否则从1开始自增1
 */
- (void)addLiveGiftShowModel:(HLGiftLiveShowModel *)showModel showNumber:(NSInteger)showNumber;

/**
 添加一个礼物视图，若该礼物不在视图上则从数字1显示到指定数字的效果，否则继续增加指定数字
 
 @param showModel 礼物模型
 */
- (void)animatedWithGiftModel:(HLGiftLiveShowModel *)showModel;

@end


NS_ASSUME_NONNULL_END
